#include "epoll.h"
#include "../log/systemLog/systemLog.h"

int g_epoll_fd = -1;

int epoll_create_instance(int size)
{
    // 参数检查
    if (size <= 0)
    {
        return SYSTEM_ERR_INVALID_ARGUMENT; // 参数错误
    }
    // 创建 epoll 实例
    int epoll_fd = epoll_create(size);
    if (epoll_fd < 0)
    {
        return SYSTEM_ERR_EPOLL_CREATE; // epoll 创建失败
    }

    return epoll_fd; // 返回 epoll 实例的文件描述符
}

int epoll_add_fd(int epoll_fd, int fd)
{
    // 参数检查
    if (epoll_fd <= 0 || fd <= 0)
    {
        return SYSTEM_ERR_INVALID_ARGUMENT; // 参数错误
    }

    struct epoll_event event;
    event.events = EPOLLIN; // 监听可读事件
    event.data.fd = fd;     // 关联文件描述符

    // 向 epoll 实例中添加文件描述符
    int ret = epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fd, &event);
    if (ret != 0)
    {
        return SYSTEM_ERR_EPOLL_ADD; // epoll 添加失败
    }

    return SYSTEM_ERR_OK; // 成功
}

int epoll_delete_fd(int epoll_fd, int fd)
{
    // 参数检查
    if (epoll_fd <= 0 || fd <= 0)
    {
        return SYSTEM_ERR_INVALID_ARGUMENT; // 参数错误
    }

    // 从 epoll 实例中删除文件描述符
    int ret = epoll_ctl(epoll_fd, EPOLL_CTL_DEL, fd, NULL);
    if (ret != 0)
    {
        return SYSTEM_ERR_EPOLL_DELETE; // epoll 删除失败
    }

    return SYSTEM_ERR_OK; // 成功
}